Skip to content

Use Blacksmith as macOS CI default#5019

Open
lawrencecchen wants to merge 3 commits into
mainfrom
feat-blacksmith-ci
Open

Use Blacksmith as macOS CI default#5019
lawrencecchen wants to merge 3 commits into
mainfrom
feat-blacksmith-ci

Conversation

@lawrencecchen
Copy link
Copy Markdown
Contributor

@lawrencecchen lawrencecchen commented May 30, 2026

Summary

Make Blacksmith the checked-in default for paid macOS CI jobs when MACOS_RUNNER_15 / MACOS_RUNNER_26 are unset. Remove Warp runner choices from manual workflows and actionlint config. Update runner docs and the CI guard to treat Blacksmith as the supported default.

I also set the live repo variables to blacksmith-6vcpu-macos-15 and blacksmith-6vcpu-macos-26, so new main runs use Blacksmith immediately.

Queue check

Testing

  • tests/test_ci_self_hosted_guard.sh
  • actionlint -shellcheck= -config-file .github/actionlint.yaml .github/workflows/ci.yml .github/workflows/ci-macos-compat.yml .github/workflows/build-ghosttykit.yml .github/workflows/nightly.yml .github/workflows/release.yml .github/workflows/test-depot.yml .github/workflows/tmux-corpus.yml .github/workflows/perf-activation.yml .github/workflows/test-e2e.yml

Full actionlint with shellcheck still reports existing shellcheck findings in unrelated workflow scripts.


View with Codesmith Autofix with Codesmith
Need help on this PR? Tag @codesmith with what you need. Autofix is disabled.


Note

Medium Risk
Shifts all default macOS CI/release/nightly jobs to Blacksmith; queue capacity was the reason Warp was used before, so main CI timing could regress if Blacksmith queues spike again.

Overview
Paid macOS CI now defaults to Blacksmith when MACOS_RUNNER_15 / MACOS_RUNNER_26 are unset: workflow runs-on fallbacks use blacksmith-6vcpu-macos-15 and blacksmith-6vcpu-macos-26 instead of Warp labels across ci, release, nightly, compat, e2e, perf, and related jobs.

Warp is removed from .github/actionlint.yaml, manual runner choices in perf-activation and test-e2e, and related SPM cache keys / concurrency expressions. Docs (docs/macos-ci-runners.md) and tests/test_ci_self_hosted_guard.sh now treat Blacksmith as the only checked-in paid default; repo variables remain the override path for capacity incidents.

Reviewed by Cursor Bugbot for commit 56156bd. Bugbot is set up for automated code reviews on this repo. Configure here.


Summary by cubic

Switches paid macOS CI defaults to Blacksmith. Unset MACOS_RUNNER_15/MACOS_RUNNER_26 now fall back to blacksmith-6vcpu-macos-15/blacksmith-6vcpu-macos-26, not Warp, and docs cover temporary overrides during capacity events.

  • Refactors
    • Replaced all runs-on fallbacks with blacksmith-6vcpu-macos-15 and blacksmith-6vcpu-macos-26 across workflows.
    • Removed Warp labels from manual workflow inputs and .github/actionlint.yaml; updated input text to say “then Blacksmith.”
    • Updated e2e/perf auto resolution, run-name, concurrency groups, and SPM cache keys to prefer Blacksmith; kept depot-macos-* options and identity guard for GUI activation runs.
    • Updated docs/macos-ci-runners.md to make Blacksmith the checked-in default and document repo-variable capacity overrides.
    • Tightened tests/test_ci_self_hosted_guard.sh to allow only vars.MACOS_RUNNER_* or Blacksmith labels.

Written for commit 56156bd. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

  • Chores

    • Switched CI/CD macOS jobs to use Blacksmith runner defaults instead of prior runner labels across workflows and nightly/release builds.
    • Updated workflow runner fallbacks and cache keys to align with the new runner selection.
  • Documentation

    • Revised macOS CI runner guidance and manual-run behavior to reflect repository-variable-first logic and Blacksmith fallbacks.
  • Tests

    • Updated CI self-hosted runner guard tests and failure messages to validate the new allowed runner labels.

Review Change Stack

@chatgpt-codex-connector
Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@vercel
Copy link
Copy Markdown

vercel Bot commented May 30, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
cmux Ready Ready Preview, Comment May 30, 2026 11:02am
cmux-staging Building Building Preview, Comment May 30, 2026 11:02am

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 30, 2026

📝 Walkthrough

Walkthrough

Replace WarpBuild macOS runner fallbacks with Blacksmith labels across workflows, remove Warp labels from the actionlint allowlist, update docs to reflect MACOS_RUNNER_* → Blacksmith fallbacks, and tighten CI guard tests to accept only Blacksmith or repo-variable runner references.

Changes

macOS runner migration from WarpBuild to Blacksmith

Layer / File(s) Summary
Runner allowlist and docs
.github/actionlint.yaml, docs/macos-ci-runners.md
Removed warp-macos-*-arm64-6x entries from the actionlint allowlist and updated documentation to describe MACOS_RUNNER_15/MACOS_RUNNER_26 with checked-in Blacksmith fallbacks and manual-run behavior.
Workflow runner defaults and cache keys
.github/workflows/build-ghosttykit.yml, .github/workflows/ci.yml, .github/workflows/ci-macos-compat.yml, .github/workflows/nightly.yml, .github/workflows/release.yml, .github/workflows/perf-activation.yml, .github/workflows/test-depot.yml, .github/workflows/test-e2e.yml, .github/workflows/tmux-corpus.yml
Multiple workflows updated their runs-on expressions to prefer ${{ vars.MACOS_RUNNER_* }} with checked-in fallbacks like blacksmith-6vcpu-macos-15/-26; perf/e2e workflows and package cache keys were adjusted to partition by the new runner identity.
Guard and validation updates
tests/test_ci_self_hosted_guard.sh
CI self-hosted runner guard tests and validation regexes now accept only vars.MACOS_RUNNER_* and blacksmith-<N>vcpu-macos-* labels; failure messages updated to reflect the new allowed set.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • manaflow-ai/cmux#4922: Earlier update to macOS CI runner fallback handling and self-hosted guard validation around the same blacksmith-6vcpu-macos-* vs warp-macos-* label transition.
  • manaflow-ai/cmux#4984: Prior Blacksmith macOS runner migration that this PR extends, updating additional workflow defaults and tightening the actionlint allowlist.
  • manaflow-ai/cmux#4926: Inverse change that switched runners back to WarpBuild and reverted the self-hosted guard, affecting the same workflows and validation logic.

Poem

🐰 From Warp to Blacksmith I hop with delight,
CI labels now gleam in morning light,
Workflows and docs in tidy array,
Guards watch the runners and keep drift at bay,
A cached key here, a fallback set right. 🔨

🚥 Pre-merge checks | ✅ 17 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (17 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely summarizes the main change: making Blacksmith the default macOS CI runner, which is the primary objective across all modified workflows and configuration.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Cmux Swift Actor Isolation ✅ Passed PR contains only CI/CD workflow, configuration, documentation, and shell script changes; no production Swift code modifications present.
Cmux Swift Blocking Runtime ✅ Passed PR contains only CI infrastructure changes (workflows, configs, scripts, docs); no production Swift code is modified, so blocking-runtime check is not applicable.
Cmux No Hacky Sleeps ✅ Passed PR changes only CI workflow YAML, configuration, documentation, and test scripts—all out of scope or explicitly allowed per runtime-no-hacky-sleeps.md; no production code or new sleeps introduced.
Cmux Algorithmic Complexity ✅ Passed PR modifies only CI workflows, config, documentation, and test scripts—no production code. Rule applies to production code; test scripts are explicitly allowed.
Cmux Swift Concurrency ✅ Passed PR only modifies CI/workflow YAML files, documentation, and test scripts—no Swift source code files are modified, so Swift concurrency patterns cannot be introduced or expanded.
Cmux Swift @Concurrent ✅ Passed No Swift code changes present in this PR. All modifications are CI/CD configuration, workflows, and documentation. The @concurrent annotation rules do not apply.
Cmux Swift File And Package Boundaries ✅ Passed This PR is a full repository import (all 2,876 files added new). The custom check applies to production Swift changes; no Swift files are modified, only imported.
Cmux Swift Logging ✅ Passed PR contains no Swift code changes—only CI/CD workflow, linting configuration, documentation, and shell script modifications. Swift logging check is not applicable.
Cmux User-Facing Error Privacy ✅ Passed PR changes only CI workflows, tests, and operational docs—all explicitly allowed by the user-facing-errors.md rule, which exempts tests and operational runbooks from the check.
Cmux Full Internationalization ✅ Passed PR contains only infrastructure changes (CI workflows, config, tests) and i18n setup—no user-facing Swift text, string catalogs, or web UI changes requiring localization per the rule.
Cmux Swiftui State Layout ✅ Passed PR contains only CI/CD configuration changes (runner selection, workflows, documentation); no SwiftUI or Swift code modifications exist, making the SwiftUI state layout check inapplicable.
Cmux Architecture Rethink ✅ Passed PR contains no Swift code changes; only CI/CD infrastructure updates (workflows, configs, docs, test script). Swift architectural rethink check is not applicable.
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed PR contains no Swift code changes; check only applies to Swift changes for auxiliary windows. All changes are CI/workflow configuration, documentation, and test scripts.
Description check ✅ Passed The PR description comprehensively covers all required sections: Summary explains what changed and why, Testing documents how changes were verified, and Checklist items are addressed.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat-blacksmith-ci

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 30, 2026

Greptile Summary

This PR switches the default macOS CI runner provider from Warp to Blacksmith across all paid workflow jobs. When MACOS_RUNNER_15 / MACOS_RUNNER_26 repo variables are unset, jobs now fall back to blacksmith-6vcpu-macos-15 / blacksmith-6vcpu-macos-26 instead of the previous warp-macos-* labels.

  • Replaces all warp-macos-* fallbacks with blacksmith-6vcpu-macos-* across ci.yml, ci-macos-compat.yml, nightly.yml, release.yml, build-ghosttykit.yml, test-depot.yml, tmux-corpus.yml, perf-activation.yml, and test-e2e.yml.
  • Removes Warp options from manual runner choice inputs in perf-activation.yml and test-e2e.yml, and drops Warp labels from the actionlint allowlist.
  • Updates the guard shell test (test_ci_self_hosted_guard.sh) and documentation to reflect Blacksmith-only defaults, adding a brief "Capacity events" override procedure.

Confidence Score: 5/5

Safe to merge — all changes are mechanical label replacements with no logic alterations, and the guard test is kept in sync.

Every warp-macos-* reference is replaced uniformly with the corresponding blacksmith-6vcpu-macos-* label across all affected workflows, the actionlint allowlist, the SPM cache keys, the manual dispatch dropdowns, and the guard regression test. The Depot identity guard path in test-e2e.yml is preserved and correctly updated. No conditional logic, timeouts, or job dependencies changed. The repo-variable override mechanism remains intact so operators can redirect runners without a code change.

No files require special attention.

Important Files Changed

Filename Overview
.github/actionlint.yaml Removed warp-macos-15-arm64-6x and warp-macos-26-arm64-6x from the self-hosted runner allowlist; Blacksmith labels remain.
.github/workflows/ci.yml Four jobs (tests, lag-regressions, spm-cache, ui-regressions) updated from warp-macos-15-arm64-6x fallback to blacksmith-6vcpu-macos-15; logic unchanged.
.github/workflows/release.yml build-sign-notarize job runner fallback changed from warp-macos-26-arm64-6x to blacksmith-6vcpu-macos-26; no logic change.
.github/workflows/nightly.yml build-sign-notarize-nightly runner fallback updated to blacksmith-6vcpu-macos-26.
.github/workflows/test-e2e.yml All warp fallback expressions replaced with blacksmith-6vcpu-macos-15; Warp choices removed from dropdown; depot-macos-* choices and Depot identity guard retained; SPM cache keys updated consistently.
.github/workflows/perf-activation.yml Runner description, fallback expression, and SPM cache key all updated from warp to blacksmith; Warp choices removed from dispatch dropdown.
.github/workflows/ci-macos-compat.yml Matrix os entries for both macOS 15 and 26 updated to Blacksmith fallbacks.
tests/test_ci_self_hosted_guard.sh AWK regex patterns and the Depot-identity grep string updated to remove Warp acceptance and match the new Blacksmith-only fallback expressions.
docs/macos-ci-runners.md Docs rewritten: Blacksmith is now the checked-in default, repo variables are override-only, and a new Capacity events section provides emergency override guidance.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Workflow runs-on expression] --> B{vars.MACOS_RUNNER_15\nor MACOS_RUNNER_26 set?}
    B -- Yes --> C[Use repo variable value]
    B -- No --> D[Use checked-in Blacksmith default\nblacksmith-6vcpu-macos-15/26]
    C --> E{Runner starts with\ndepot-macos-?}
    D --> E
    E -- Yes --> F[Validate Depot runner identity\ntest-e2e.yml only]
    E -- No --> G[Run job normally]
    F --> G
    H[Capacity event] --> I[gh variable set MACOS_RUNNER_15\nto alternate paid runner]
    I --> C
Loading

Reviews (2): Last reviewed commit: "Document macOS runner capacity override" | Re-trigger Greptile

Comment thread docs/macos-ci-runners.md
Comment on lines +21 to 26
Remove the override and use the checked-in Blacksmith defaults:

```bash
gh variable delete MACOS_RUNNER_15 --repo manaflow-ai/cmux
gh variable delete MACOS_RUNNER_26 --repo manaflow-ai/cmux
```
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 No documented escape hatch for Blacksmith capacity outages

The PR description explicitly cites a past event where Blacksmith queues hit 55–126 minutes and caused a full revert (PR #4926). The old docs told operators to gh variable set … warp-macos-15-arm64-6x; that guidance is now gone, and Warp is removed from all workflow dropdowns and the actionlint allowlist. If Blacksmith queues surge again, an operator in a time-sensitive release has no documented runner to fall back to. The only option—setting MACOS_RUNNER_15/MACOS_RUNNER_26 to a different provider—is correct in principle, but the docs no longer say what labels are valid alternatives or where to find them.

Consider adding a brief "Emergency override" section that names at least one alternative runner label (e.g., a Warp or GitHub-hosted fallback) and notes that the label must also be added to .github/actionlint.yaml before use.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

@lawrencecchen
Copy link
Copy Markdown
Contributor Author

Paused merge after the refreshed PR run stayed queued on Blacksmith macOS runners for over 11 minutes without a runner assignment. Live repo variables have been restored to Warp for now: MACOS_RUNNER_15=warp-macos-15-arm64-6x, MACOS_RUNNER_26=warp-macos-26-arm64-6x. Current Warp probe assigned a runner in about 1 second. Keeping this PR open for a later Blacksmith retry.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant